#include <cstddef>
#include <iostream>
#include <iterator>
#include <map>
#include <string>
#include <vector>

std::string OT = "([{<";
std::string AL = "({[<>]})";

int main() {
  std::map<char, int> slova; // создаем словарь скобок
  slova['('] = 1;
  slova[')'] = 1;
  slova['['] = 2;
  slova[']'] = 2;
  slova['{'] = 3;
  slova['}'] = 3;
  slova['<'] = 4;
  slova['>'] = 4;
  std::string str; // создаем строку куда будем класть последовательность
  std::cout << "Введите скобочную последовательность: ";
  std::cin >> str; // получаем строку через инпут
  int flag = 1;
  std::vector<int> stek; // создаем стек
  for (size_t i = 0; i < str.size(); i++) {
    if (AL.find(str[i]) != std::string::npos) {

      if (OT.find(str[i]) != std::string::npos) {
        stek.push_back(slova[str[i]]);
      } else {
        if (stek.back() == slova[str[i]]) {
          stek.pop_back();
        } else {
          flag = 0;
        }
      }
    }
  }
    if (stek.size() == 0 && flag == 1){
        std::cout << "True" << std::endl;
    }
    else{
        std::cout << "False" << std::endl;
    }
  return 0;
}

